package com.t.bricks.bussiness.controller.countersum;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;

import java.util.Arrays;
import java.util.List;
import java.util.Map;

import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import com.t.bricks.bussiness.controller.common.BaseController;
import com.t.bricks.bussiness.db.entity.countersum.CounterSum;
import com.t.bricks.bussiness.service.common.CommonService;
import com.t.bricks.model.MsgEmity;

/**
 * 计数值控制层
 * 继承BaseController可直接实现通用方法,三个泛型代表:业务类、实体类、查询类
 * 通用业务类CommonService已经包含常用功能,使用自定义CounterSumService(需实现)可覆盖通用方法或扩展业务功能
 * 通用查询类可以直接使用Map,否则使用自定义ConditionCounterSum(需实现)
 * @author HuangXinBian
 * @DateTime 2022年06月02日 15:20:42
 */
@RestController
@Api(value="计数值", tags={"计数值操作接口"})
@RequestMapping("/counter/sum/")
public class CounterSumController extends BaseController<CommonService, CounterSum, Map<String, Object>> {
	
	/**
	 * 控制操作,首位9不参与用6个数代表开关,0为不限制,1为限制
	 * 6个数的控制分别是:删除、修改、查询、导出、统计、步骤值可逆
	 * 其中前5个为'是否仅创建者可操作'后续为其它控制开关
	 */
	protected int enableTag = 9000000;

	/**
	 * 设置 检查待新增内容是否存在重复数据(多字段组合重复即重复)集合
	 * @return 返回的集合将覆盖父类的checkRepeatCombination成员,若返回null则不进行重复校验
	 */
	@Override
	protected List<String> setCheckRepeatCombination() {
		return Arrays.asList("sName", "sGroup", "sType");
	}

	/**
	 * 设置 检查待新增内容是否存在重复数据(单独字段重复即重复)集合
	 * @return 返回的集合将覆盖父类的checkRepeatAlone成员,若返回null则不进行重复校验
	 */
	@Override
	protected Map<String, Integer> setCheckRepeatAlone() {
		return null;
	}

	/**
	 * 删除数据
	 * @param iVersion
	 * @param id 记录主键
	 * @return MsgEmity
	 */
	@RequestMapping(method={RequestMethod.POST}, value="/del")
	@Override
	public MsgEmity del(Integer iVersion, String id) {
		return super.del(iVersion, id);//直接使用父类中定义的方法,否则使用counterSumService.del(iVersion, uId);
	}

	/**
	 * 新增数据
	 * @param counterSum 计数值实体对象
	 * @return MsgEmity
	 */
	@ApiOperation(value="新增数据", response=CounterSum.class)
	@RequestMapping(method={RequestMethod.POST}, value="/add")
	@Override
	public MsgEmity add(@RequestBody CounterSum counterSum) {
		return super.add(counterSum);//直接使用父类中定义的方法,否则使用counterSumService.add(counterSum);
	}

	/**
	 * 修改数据
	 * @param counterSum 计数值实体对象
	 * @return MsgEmity
	 */
	@ApiOperation(value="修改数据", response=CounterSum.class)
	@RequestMapping(method={RequestMethod.POST}, value="/edit")
	@Override
	public MsgEmity edit(@RequestBody CounterSum counterSum) {
		return super.edit(counterSum);//直接使用父类中定义的方法,否则使用counterSumService.edit(counterSum);
	}

	/**
	 * 根据关键值取对象集合
	 * @param relayInfo 条件实体对象
	 * @return MsgEmity
	 */
	@ApiOperation(value="根据关键值取对象集合", response=CounterSum.class)
	@RequestMapping(method={RequestMethod.POST, RequestMethod.GET}, value="/find/key")
	@Override
	public MsgEmity findByKey(@RequestBody CounterSum counterSum) {
		if (null == counterSum) {
			return MsgEmity.err(9001, "条件不能为空");
		}
		
		return super.findByKey(counterSum);
	}

//	/**
//	 * 根据分类取对象
//	 * @param sType 分类
//	 * @return MsgEmity
//	 */
//	@ApiOperation(value="根据分类取对象", response=CounterSum.class)
//	@ApiImplicitParams({
//		@ApiImplicitParam(name="sType", value="分类", dataType="String", paramType="query", required=true)
//	})
//	@RequestMapping(method={RequestMethod.POST, RequestMethod.GET}, value="/find/type")
//	public MsgEmity findByType(String sType) {
//		if (null == sType || "".equals(sType.trim())) {
//			return MsgEmity.err(9001, "分类不能为空");
//		}
//		
//		CounterSum counterSum = new CounterSum();
//		counterSum.setsType(sType);
//		
//		return super.findByKey(counterSum);
//	}

	/**
	 * 数值加1
	 * @param sName 名称
	 * @param sGroup 分组
	 * @param sType 类型
	 * @return MsgEmity
	 */
	@ApiOperation(value="阅读量加一", response=CounterSum.class)
	@ApiImplicitParams({
		@ApiImplicitParam(name="sName", value="名称", dataType="String", paramType="query", required=true),
		@ApiImplicitParam(name="sGroup", value="分组", dataType="String", paramType="query", required=true),
		@ApiImplicitParam(name="sType", value="分类", dataType="String", paramType="query", required=true)
	})
	@RequestMapping(method={RequestMethod.POST}, value="/inc")
	public MsgEmity inc1Count(String sName, String sGroup, String sType) {
		if (null == sType || "".equals(sType.trim())) {
			return MsgEmity.err(9001, "分类不能为空");
		}

		return super.callMapping(sName, sGroup, sType);//直接访问Mapping
	}

}
